<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>深拷贝</title>
</head>
<body>
  <script>
    // 深拷贝拷贝多层, 每一级别的数据都会拷贝.
    var obj = {
      id: 1,
      name: 'andy',
      msg: {
        age: 18,
      },
      color: ['pink', 'red'],
    }
    var o = {}

    // 封装函数
    function deepCopy (newobj, oldobj) {
      for (var k in oldobj) {
        // 判断我们的属性值属于那种数据类型
        // 1. 获取属性值  oldobj[k]
        var item = oldobj[k]
        // 2. 判断这个值是否是数组
        if (item instanceof Array) {   // 这里先判断数组，因为数组属于对象，先把数组筛选出去
          newobj[k] = []
          deepCopy(newobj[k], item)
        } else if (item instanceof Object) {
          // 3. 判断这个值是否是对象
          newobj[k] = {}
          deepCopy(newobj[k], item)
        } else {
          // 4. 属于简单数据类型
          newobj[k] = item
        }
      }
    }

    deepCopy(o, obj)
    console.log(o)

    var arr = []
    console.log(arr instanceof Object)
    o.msg.age = 20
    console.log(obj)
  </script>
</body>
</html>